package io.gitee.thinkbungee.crud.mongo.bean;

import lombok.Data;
import org.springframework.data.domain.Sort;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * mongo 分页模型
 * 参考mybatis {@link com.baomidou.mybatisplus.extension.plugins.pagination.Page}
 *
 * @author chenyichang
 * @date 2022/4/21
 */
@Data
public class MongoPage<T> {
    /**
     * 总数
     */
    protected long total = 0;
    /**
     * 当前页
     */
    protected long current = 1;
    /**
     * 每页显示条数，默认 10
     */
    protected long size = 10;
    /**
     * 是否进行 count 查询
     */
    protected Boolean searchCount = true;

    /**
     * 查询数据列表
     */
    protected List<T> records = Collections.emptyList();

    /**
     * 排序字段信息
     */
    protected List<SortBuilder> orders = new ArrayList<>();


    /**
     * 添加新的排序条件，构造条件可以使用工厂：{@link SortBuilder#add(String, Sort.Direction)}
     *
     * @param items 条件
     * @return 返回分页参数本身
     */
    public MongoPage<T> addOrder(SortBuilder... items) {
        orders.addAll(Arrays.asList(items));
        return this;
    }

    /**
     * 添加新的排序条件，构造条件可以使用工厂：{@link SortBuilder#add(String, Sort.Direction)}
     *
     * @param items 条件
     * @return 返回分页参数本身
     */
    public MongoPage<T> addOrder(List<SortBuilder> items) {
        orders.addAll(items);
        return this;
    }
}
